package com.jungle.sp.daily.feature.d7_virtual_thread;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;

import java.util.List;
import java.util.stream.IntStream;

/**
 * @author Jungle
 * @create 2024-07-14 8:16

 */
public class Demo1 {
    /**
     * 虚拟线程和物理线程执行性能对比
     * -Djdk,virtualThreadScheduler,parallelism=2 -Djdk,virtualThreadScheduler.maxPoolsize=2
     *
     *
     *
     * 使用虚拟线程的注意事项
     * 虚拟线程不是更快的线程，虚拟线程存在的价值是提高系统的吞吐量，而不是提高线程的执行速度虚拟线程只适合10密集型的任务，如果你的任务是CPU密集型的或者需要长时间进行内存计算，那么不要使用虚找线程。
     * 虚拟线程不需要池化，你只需要在需要用到它的时候创建它，JDK会自动完成清理工作。
     * 最后，虚拟线程还是工作在物理线程之上的，且目前主流的开发框架都已经在开始支持虚拟线程了，比如Tomcat、Spring、SpringBoot等,
     */
    public static void main(String[] args) {
        List<Thread> list = IntStream.range(0, 100_000).mapToObj(_ -> Thread.ofVirtual().unstarted(() -> System.out.println(Thread.currentThread()))).toList();
        TimeInterval timer = DateUtil.timer();
        list.forEach(item->{
            item.start();
            try {
                item.join();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        long interval = timer.interval();
        System.out.println(STR."花费的时间==》\{String.format("%.3f", interval /1000.0)}");
    }
}
